"""
参数分类对象，支持点号访问参数
"""
from typing import Dict, Any

from .value import ParameterValue


class ParameterCategory:
    """参数分类对象，支持点号访问参数"""
    
    def __init__(self, category_data: Dict[str, Any]):
        self._data = category_data
        self._parameters = {}
        
        # 创建参数对象
        for param_name, param_data in category_data.get('parameters', {}).items():
            self._parameters[param_name] = ParameterValue(param_data)
    
    @property
    def name(self):
        """分类中文名称"""
        return self._data.get('name')
    
    @property
    def name_en(self):
        """分类英文名称"""
        return self._data.get('name_en')
    
    @property
    def description(self):
        """分类描述"""
        return self._data.get('description')
    
    @property
    def id(self):
        """分类ID"""
        return self._data.get('id')
    
    @property
    def created_at(self):
        """创建时间"""
        return self._data.get('created_at')
    
    @property
    def updated_at(self):
        """更新时间"""
        return self._data.get('updated_at')
    
    def __getattr__(self, name):
        """支持点号访问参数"""
        if name in self._parameters:
            return self._parameters[name]
        raise AttributeError(f"分类 '{self.name_en}' 中没有参数 '{name}'")
    
    def __dir__(self):
        """支持dir()函数，显示可用属性"""
        return list(self._parameters.keys()) + ['name', 'name_en', 'description', 'id', 'created_at', 'updated_at']
    
    def __str__(self):
        return f"ParameterCategory(name='{self.name_en}', parameters={list(self._parameters.keys())})"
    
    def __repr__(self):
        return self.__str__()
    
    def list_parameters(self):
        """列出所有参数名称"""
        return list(self._parameters.keys())
    
    def get_parameter(self, name: str) -> ParameterValue:
        """获取指定参数"""
        if name not in self._parameters:
            raise KeyError(f"参数 '{name}' 不存在")
        return self._parameters[name]
    
    def __iter__(self):
        """支持迭代，返回所有参数名称"""
        return iter(self._parameters.keys())
    
    def __getitem__(self, param_name: str) -> ParameterValue:
        """支持中括号访问参数对象"""
        if param_name not in self._parameters:
            raise KeyError(f"参数 '{param_name}' 不存在")
        return self._parameters[param_name]

